#include "Populacao.h"


Populacao::Populacao(void)
{
	soldados=NULL;
	castelos=NULL;
	nsoldados=0;
	ncastelos=0;
	jogada=0;
}

string Populacao::getnome(){
	return nome;
}

int Populacao::getNSoldados(){
	return nsoldados;
}

void Populacao::addcastelo(Castelo c){
	Castelo *aux=new Castelo[ncastelos+1];

	if(aux==NULL)
		return;
	for(int i=0;i<ncastelos;i++){
		aux[i]= castelos[i];
	}

	aux[ncastelos]=c;
	delete[]castelos;
	castelos=aux;
	ncastelos++;

}

void Populacao::addsoldado(Soldado s){
	Soldado *aux=new Soldado[nsoldados+1];

	if(aux==NULL)
		return;
	for(int i=0; i<nsoldados;i++){
		aux[i]=soldados[i];
	}
	aux[nsoldados]=s;
	delete[]soldados;
	soldados=aux;
	nsoldados++;
}

int Populacao::procuracastelo(int nserie){
	for(int i=0; i<ncastelos; i++){
		if(nserie==castelos[i].getnserie())
			return i;
	}
	return -1;
}

int Populacao::procurasoldado(int nserie){
	for(int i=0; i<nsoldados; i++){
		if(nserie==soldados[i].getnserie())
			return i;
	}
	return -1;
}

void Populacao::removecastelo(Castelo *c){

	if(ncastelos==1){
		delete[]castelos;
		ncastelos=0;
		castelos=NULL;
		return;
	}

	int pos = procuracastelo(c->getnserie());
	if(pos==-1)
		return;
	Castelo *aux = new Castelo[ncastelos-1];

	for(int i=0; i<(ncastelos-1);i++){
		if(i<pos){
			aux[i]=castelos[i];
		}
		else
			aux[i]=castelos[i+1];
	}

	delete[]castelos;
	castelos=aux;
	ncastelos--;

}

void Populacao::removesoldado(Soldado *s){
	
	if(nsoldados==1){
		delete[]soldados;
		nsoldados=0;
		soldados=NULL;
		return;
	}

	int pos = procurasoldado(s->getnserie());
	if(pos==-1)
		return;
	
	Soldado *aux = new Soldado[nsoldados-1];

	for(int i=0; i<(nsoldados-1);i++){
		if(i<pos){
			aux[i]=soldados[i];
		}
		else
			aux[i]=soldados[i+1];
	}

	delete[]soldados;
	soldados=aux;
	nsoldados--;
}

int Populacao::getcor(){
	return cor;
}

int Populacao::getjogada(){
	return jogada;
}

void Populacao::setcor(int c){
	cor=c;
}

void Populacao::setnome(string nomepop){
	nome=nomepop;
}

void Populacao::setjogada(int j){
	jogada=j;
}

Soldado Populacao::retornasoldado(int nserie){
	Soldado s,aux;

	for(int i=0;i<nsoldados;i++){
		if(soldados[i].getnserie()==nserie)
			aux=soldados[i];
	}

	return aux;
}

Populacao::~Populacao(void)
{
}

